package co.yixiang.yshop.module.cart.service.storecart;

import co.yixiang.yshop.module.cart.controller.app.cart.param.AppCartChangeSkuParam;
import co.yixiang.yshop.module.cart.dal.dataobject.storecart.StoreCartDO;
import co.yixiang.yshop.module.product.controller.app.couponrelation.vo.CartCouponVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * 购物车 Service 接口
 *
 * @author yshop
 */
public interface AppStoreCartService extends IService<StoreCartDO> {


    /**
     * 返回当前用户购物车总数量
     *
     * @param uid 用户id
     * @return int
     */
    int getUserCartNum(Long uid);

    /**
     * 添加购物车
     *
     * @param uid               用户id
     * @param productId         普通产品编号
     * @param cartNum           购物车数量
     * @param productAttrUnique 属性唯一值
     * @param isNew             1 加入购物车直接购买  0 加入购物车
     * @param combinationId     拼团id
     * @param seckillId         秒杀id
     * @param bargainId         砍价id
     * @return 购物车id
     */
    long addCart(Long uid, Long productId, Integer cartNum, String productAttrUnique,
                 Integer isNew, Long combinationId, Long seckillId, Long bargainId,Long integralShopId,Integer orderType);


    /**
     * 检测商品/秒杀/砍价/拼团库存
     *
     * @param uid               用户ID
     * @param productId         产品ID
     * @param cartNum           购买数量
     * @param productAttrUnique 商品属性Unique
     * @param type 1:普通下单 2：活动下单
     */
    void checkProductStock(Long uid, Long productId, Integer cartNum, String productAttrUnique,Integer type);


    /**
     * 购物车列表
     *
     * @param uid     用户id
     * @param cartIds 购物车id，多个逗号隔开
     * @param status  0-购购物车列表，2-活动商品
     * @return map valid-有效购物车 invalid-失效购物车
     */
    Map<String, Object> getUserProductCartList(Long uid, String cartIds, Integer status);

    /**
     * 改购物车数量
     *
     * @param cartId  购物车id
     * @param cartNum 数量
     * @param uid     uid
     */
    void changeUserCartNum(Long cartId, int cartNum, Long uid);

    /**
     * 删除购物车
     *
     * @param uid uid
     * @param ids 购物车id集合
     */
    void removeUserCart(Long uid, List<String> ids);

    /**
     * 修改购物车支付状态
     *
     * @param cartIds 购物车id列表
     */
    void updateCartPayStatus(List<String> cartIds);

    /***
     * 修改购物车商品sku
     * @param uid 用户id
     * @param param 修改参数
     */
    void changeSku(Long uid, AppCartChangeSkuParam param);

    /**
     * 查询购物车可用优惠券
     *
     * @param cartIds
     * @return
     */
    List<CartCouponVO> searchCartAvailableCoupon(String cartIds);
}
